/**
 * Copyright (C), 2015-2018, XXX有限公司
 * FileName: LogAspects
 * Author:   zhouheng
 * Date:     2018/5/25 22:11
 * Description: 日志记录类
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.zhou.annotation.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

import java.util.Arrays;

/**
 * 〈一句话功能简述〉<br> 
 * 〈日志切面类〉
 *
 * @author zhouheng
 * @create 2018/5/25
 * @since 1.0.0
 */
@Aspect
public class LogAspects {


    //抽取公共的切入点表达式
    //1、本类引用
    //2、其他的切面引用
    @Pointcut("execution(public int com.zhou.annotation.aop.MathCalculator.*(..))")
    public void pointCut(){};

    // 日志记录开始
    @Before("pointCut()")
    public void logStart(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName()+"run...."
                + Arrays.asList(joinPoint.getArgs()));
    }

    // 日志记录结束
    @After("pointCut()")
    public void logEnd(JoinPoint joinPoint){
        System.out.println(""+joinPoint.getSignature().getName()+"结束。。。@After");
    }

    // 正常结束 打印结果值
    @AfterReturning(value = "pointCut()",returning = "result")
    public void logReturn(JoinPoint joinPoint,Object result){
        System.out.println(""+joinPoint.getSignature().getName()
                +"正常返回。。。@AfterReturning:运行结果：{"+result+"}");

    }

    @AfterThrowing(value="pointCut()",throwing="exception")
    public void logException(JoinPoint joinPoint,Exception exception){
        System.out.println(""+joinPoint.getSignature().getName()+"异常。。。异常信息：{"+exception+"}");
    }
}